package cn.wen.bases.dao.hibernate;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

/**
 * Title：Hibernate Dao的接口
 * <p>
 * Description：
 * <p>
 * Copyright：Copyright (c) 2010-2012
 * 
 * @author <a href="mailto:ct_wen@qq.com">ctwen</a>, 温承瑭
 * @version Revision：1.0 Date：2010/7/21 Description：初完成。
 *          <p>
 */
public interface IBaseDao<T> {

    /**
     * 持久化指定实体
     * 
     * @param t 实体
     */
    void persist(T t);

    /**
     * 存储指定实体
     * 
     * @param t 实体
     */
    void save(T t);

    /**
     * 修改指定实体——实体需要有持久化标识
     * 
     * @param t 实体
     */
    void update(T t);

    /**
     * 存储或更新指定实体
     * 
     * @param t 实体
     */
    void saveOrUpdate(T t);

    /**
     * 存储或更新一系列类型相同的实体
     * 
     * @param entities 实体集
     */
    void saveOrUpdateAll(Collection<T> entities);

    /**
     * 删除指定实体——实体需要有持久化标识
     * 
     * @param t 实体
     */
    void delete(T t);

    /**
     * 删除一系列类型相同的实体——实体需要有持久化标识
     * 
     * @param entities 实体集
     */
    void deleteAll(Collection<T> entities);

    /**
     * 查询——获取与指定持久化标识对应的单个对象
     * 
     * @param flag 持久化标识
     * @return T类型的对象
     */
    T get(Serializable id);

    /**
     * 查询指定类型对应的实体表，单个模式返回。（以参数列表为查询条件）
     * 
     * @param paras 参数列表 ——以属性，关系运算符，值，逻辑连接符，属性，关系运算符，值，逻辑连接符 ……的形式存在，四个参数为一组。
     * @return 一个T类型的对象
     */
    T queryToOne(Object... paras);

    /**
     * 查询指定类型对应的实体表，批量模式返回。（以参数列表为查询条件）
     * 
     * @param paras 参数列表 ——以属性，关系运算符，值，逻辑连接符，属性，关系运算符，值，逻辑连接符 ……的形式存在，四个参数为一组。
     * @return 一批T类型对象，在List里。
     */
    List<T> queryToList(Object... paras);

    /**
     * 返回T类型的所有实体，批量模式返回。
     * 
     * @return 实体列表
     */
    List<T> queryAll();

}
